/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia.agente;

import Utiles.Utiles;
import entidades.DetallePedidoProductoImpl;
import entidades.DetallePedidoServicioImpl;
import entidades.PedidoImpl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import persistencia.Agente;
import persistencia.Criterio;
import persistencia.FabricaCriterio;
import persistencia.FachadaInterna;

/**
 *
 * @author Leandro
 */
public class PedidoAgente extends Agente implements Pedido {

    private PedidoImpl pedido;
    private String oidFichaInternacion;
    private String oidEstadoPedido;
    private boolean matEstadoPedido;
    private boolean matDetallesPedidoProductos;
    private boolean matDetallesPedidoServicios;

    @Override
    public Date getFechaIngreso() {
        return getPedido().getFechaIngreso();
    }

    @Override
    public void setFechaIngreso(Date fechaHoraIngreso) {
        getPedido().setFechaIngreso(fechaHoraIngreso);
    }

    @Override
    public List<DetallePedidoProducto> getDetallesProductos() {
        
       Criterio criterio;
        if(!matDetallesPedidoProductos && !this.isNuevo()){
            criterio = FabricaCriterio.getInstancia().obtenerCriterio("oidPedido", Criterio.OperadorRelacionalEnum.Igual.getString(), this.getOid(), true);
            setDetallesProductos(FachadaInterna.getInstancia().buscar(DetallePedidoProducto.class, criterio));
        }
        
        return getPedido().getDetallesProductos();
    }

    @Override
    public void setDetallesProductos(List<DetallePedidoProducto> detallesProductos) {
        getPedido().setDetallesProductos(detallesProductos);
    }

    @Override
    public List<DetallePedidoServicio> getDetallesServicios() {   
       Criterio criterio;
        if(!matDetallesPedidoServicios && !this.isNuevo()){
            criterio = FabricaCriterio.getInstancia().obtenerCriterio("oidPedido", Criterio.OperadorRelacionalEnum.Igual.getString(), this.getOid(), true);
            setDetallesServicios(FachadaInterna.getInstancia().buscar(DetallePedidoServicio.class, criterio));
        }        
        return getPedido().getDetallesServicios();
    }

    @Override
    public void setDetallesServicios(List<DetallePedidoServicio> detallesServicios) {
        getPedido().setDetallesServicios(detallesServicios);
    }

    @Override
    public EstadoPedido getEstadoPedido() {
        if(!matEstadoPedido){
            this.setEstadoPedido(FachadaInterna.getInstancia().buscar(EstadoPedido.class, oidEstadoPedido));
            matEstadoPedido = true;
        }
        return getPedido().getEstadoPedido();
    }

    @Override
    public void setEstadoPedido(EstadoPedido estadoPedido) {
        oidEstadoPedido = ((EstadoPedidoAgente)estadoPedido).getOid();
        getPedido().setEstadoPedido(estadoPedido);
    }

    @Override
    public void agregarDetallePedidoPoducto(String descripcion, int cantidad, double importeSubtotal, Producto producto) {

        DetallePedidoProductoAgente detalle = new DetallePedidoProductoAgente();
        DetallePedidoProductoImpl detallePedidoProductoImpl = new DetallePedidoProductoImpl();
        detallePedidoProductoImpl.setCantidad(cantidad);
        detallePedidoProductoImpl.setDescripcion(descripcion);
        detallePedidoProductoImpl.setProducto(producto);
        detallePedidoProductoImpl.setImporteSubtotal(importeSubtotal);
        detalle.setOidProducto(((ProductoAgente)producto).getOid());
        detalle.setDetallePedidoProducto(detallePedidoProductoImpl);
        
        
        detalle.setOidPedido(getOid());
        detalle.setOid(Utiles.generarOid());
        
        getPedido().getDetallesProductos().add(detalle);

    }
   
    @Override
    public void agregarDetallePedidoServicio(String descripcion, Date fechaHoraInicio, int duracion, double importeSubtotal, Servicio servicio, Empleado responsable) {

        DetallePedidoServicioAgente detalle = new DetallePedidoServicioAgente();
        DetallePedidoServicioImpl detallePedidoServicioImpl = new DetallePedidoServicioImpl();
        detallePedidoServicioImpl.setDescripcion(descripcion);
        detallePedidoServicioImpl.setDuracion(duracion);
        detallePedidoServicioImpl.setFechaHoraInicio(fechaHoraInicio);
        detallePedidoServicioImpl.setImporteSubtotal(importeSubtotal);
        detallePedidoServicioImpl.setResponsable(responsable);
        detallePedidoServicioImpl.setServicio(servicio);
        detalle.setDetallePedidoServicio(detallePedidoServicioImpl);
        
        detalle.setOidEmpleado(((EmpleadoAgente)responsable).getOid());
        detalle.setOidServicio(((ServicioAgente)servicio).getOid());
        detalle.setOidPedido(getOid());
        detalle.setOid(Utiles.generarOid());

        getPedido().getDetallesServicios().add(detalle);
      
    }

    @Override
    public int getNroPedido() {
        return getPedido().getNroPedido();
    }

    @Override
    public void setNroPedido(int nroPedido) {
        getPedido().setNroPedido(nroPedido);
    }

    public String getOidEstadoPedido() {
        return oidEstadoPedido;
    }

    public void setOidEstadoPedido(String oidEstadoPedido) {
        this.oidEstadoPedido = oidEstadoPedido;
    }

    public String getOidFichaInternacion() {
        return oidFichaInternacion;
    }

    public void setOidFichaInternacion(String oidFichaInternacion) {
        this.oidFichaInternacion = oidFichaInternacion;
    }
    /**
     * @return the pedido
     */
    public PedidoImpl getPedido() {
        return pedido;
    }

    /**
     * @param pedido the pedido to set
     */
    public void setPedido(PedidoImpl pedido) {
        this.pedido = pedido;
    }

    

}
